import { invoke } from "@tauri-apps/api";
import type { MapperConfig } from "./types";

/**
 * Playlist Api
 */
export class PlaylistApi {
    /**
     * 打开一个 Midi 文件
     * @param mapper Midi 映射器配置
     * @param path 文件路径
     * @returns 打开的 Midi 文件对应的 ID
     */
    public static open(mapper: MapperConfig, path: string): Promise<string> {
        return invoke("open", { mapper, path });
    }

    /**
     * 获取一个 Midi 文件的持续时间（单位：毫秒）
     * @param id Midi 文件 ID
     * @returns 读取 Midi 持续时间的 Promise
     */
    public static duration(id: string): Promise<number> {
        return invoke("duration", { id });
    }

    /**
     * 播放一个 Midi 文件
     * @param id Midi 文件 ID
     * @param startPoint 播放起始点（单位：毫秒），默认为 0
     * @returns 播放文件的 Promise
     */
    public static play(id: string, startPoint?: number): Promise<void> {
        return invoke("play", { id, startPoint });
    }

    /**
     * 转换一个 Midi 文件
     * @param id Midi 文件 ID
     * @param startPoint 转换起始点（单位：毫秒），默认为 0
     * @returns 转换文件的 Promise
     */
    public static convert(id: string, startPoint?: number): Promise<void> {
        return invoke("convert", { id, startPoint });
    }

    /**
     *  停止一个 Midi 文件
     * @param id Midi 文件 ID
     * @returns  停止文件的 Promise
     */
    public static stop(id: string): Promise<void> {
        return invoke("stop", { id });
    }

    /**
     * 关闭一个 Midi 文件
     * @param id Midi 文件 ID
     * @returns 关闭文件的 Promise
     */
    public static close(id: string): Promise<void> {
        return invoke("close", { id });
    }
}
